package util;


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * @author: cheng
 * @date: 2023/7/4 17:44
 * @description:
 */
public class PinyinUtil {
    /**
     *
     * @param src 要获取拼音的字符串
     * @param fullSpell 是否要获取全拼 假设为张三(若为 true 则获取zhangsan. 若为 false 则为zs)
     * @return
     */
    public static String get(String src,boolean fullSpell){
        if(null == src || src.trim().length() == 0){
            return null;
        }

        //针对 pinyin4j 进行配置,让输出的 yu 由 v 表示
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        //遍历字符串每个字符,将其转换为拼音,将结果拼接到 StringBuilder 里
        StringBuilder sb = new StringBuilder();
        for(int i = 0;i < src.length();i++){
            char ch = src.charAt(i);
            //单个字符串进行转换
            String[] tmp = null;
            try {
                tmp = PinyinHelper.toHanyuPinyinStringArray(ch,format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            if(null == tmp || tmp.length == 0){
                //不是汉语拼音,假若是 a b c d 等字符,将其直接加入到 StringBuilder 里
                sb.append(ch);
            }else if(fullSpell){
                //完整全拼
                sb.append(tmp[0]);
            }else {
                //结果非空,获取首字母
                sb.append(tmp[0].charAt(0));
            }
        }
        return sb.toString();
    }
}
